import { Controller, Get, Post, Body, Put, Patch, Param, Delete, Query, HttpCode, HttpStatus } from '@nestjs/common';
import { ProductsService } from './products.service';
import { CreateProductDto } from './dto/create-product.dto';
import { UpdateProductDto } from './dto/update-product.dto';
import { Product } from './entities/product.entity';
import { PaginatedResult } from '../../common/interfaces/pagination.interface';

/**
 * 产品控制器
 * 处理与产品相关的HTTP请求
 */
@Controller('products')
export class ProductsController {
  constructor(private readonly productsService: ProductsService) {}

  /**
   * 创建产品
   * @param createProductDto 产品创建数据
   * @returns 创建结果
   */
  @Post()
  @HttpCode(HttpStatus.CREATED)
  async create(@Body() createProductDto: CreateProductDto): Promise<Product> {
    return await this.productsService.create(createProductDto);
  }

  /**
   * 获取所有产品
   * @param page 页码
   * @param limit 每页数量
   * @returns 分页产品列表
   */
  @Get()
  async findAll(
    @Query('page') page: number = 1,
    @Query('limit') limit: number = 10,
  ): Promise<PaginatedResult<Product>> {
    return await this.productsService.findAll(page, limit);
  }

  /**
   * 获取单个产品
   * @param id 产品ID
   * @returns 产品信息
   */
  @Get(':id')
  async findOne(@Param('id') id: string): Promise<Product> {
    return await this.productsService.findOne(id);
  }

  /**
   * 更新产品
   * @param id 产品ID
   * @param updateProductDto 更新数据
   * @returns 更新结果
   */
  @Put(':id')
  async update(
    @Param('id') id: string,
    @Body() updateProductDto: UpdateProductDto,
  ): Promise<Product> {
    return await this.productsService.update(id, updateProductDto);
  }

  /**
   * 删除产品
   * @param id 产品ID
   * @returns 删除结果
   */
  @Delete(':id')
  @HttpCode(HttpStatus.NO_CONTENT)
  async remove(@Param('id') id: string): Promise<void> {
    return await this.productsService.remove(id);
  }
} 